fix memory leak in garmin_fit.
authortsteven4 <tsteven4@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 1 Aug 2013 03:59:09 +0000 (03:59 +0000)
committertsteven4 <tsteven4@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 1 Aug 2013 03:59:09 +0000 (03:59 +0000)
Also fix an error in the mask for local messsage type.

gpsbabel/garmin_fit.cc

index 1ee872f0aea7ca785b7e9721ef9eeb6a590bc528..5048681697a112326aa3b0d9d26700d09d208400 100644 (file)
@@ -68,6 +68,15 @@ fit_rd_init(const char* fname)
 static void
 fit_rd_deinit(void)
 {
+  int local_id;
+
+  for (local_id=0; local_id<16; local_id++) {
+    fit_message_def* def = &fit_data.message_def[local_id];
+    if (def->fields) {
+      xfree(def->fields);
+    }
+  }
+
   gbfclose(fin);
 }
 
@@ -184,12 +193,12 @@ fit_getuint32(void)
 static void
 fit_parse_definition_message(uint8_t header)
 {
-  int local_id = header & 0x1f;
+  int local_id = header & 0x0f;
   fit_message_def* def = &fit_data.message_def[local_id];
   int i;
 
   if (def->fields) {
-    free(def->fields);
+    xfree(def->fields);
   }
 
   // first byte is reserved.  It's usually 0 and we don't know what it is,